home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
yerk
/
mps231ss.hqx
/
Mops source
/
Module source
/
DialogMod.txt
< prev
next >
Wrap
Text File
|
1993-02-07
|
4KB
|
182 lines
\ Dialog class.
\ July 91 mrh Moved to a module, and migrated some methods from Dialog+.
\ Class Dialog handles modal dialogs. For modeless dialogs, use the
\ subclass Dialog+.
:class DIALOG super{ x-array }
int RESID
ptr DLGPTR
var PROCPTR
int BOLDITEM
:m DLGPTR:
inline{ get: dlgPtr}
get: dlgPtr ;m
:m CLOSE:
nil?: dlgPtr ?EXIT
get: dlgPtr call DisposDialog
clear: dlgPtr ;m
:m OPEN?:
nil?: dlgPtr ;m
:m ITEMHANDLE: { item# -- hndl }
get: dlgPtr item# makeInt
addr: itemType addr: itemHandle addr: tempRect
call GetDItem get: itemHandle ;m
:m DRAWBOLD:
nil?: dlgPtr ?EXIT
get: boldItem ?dup 0EXIT
savePort
get: dlgPtr call setPort 3 3 pack call Pensize
itemHandle: self drop \ Sets up tempRect
-4 -4 inset: tempRect
addr: tempRect 16 16 pack call FrameRoundRect call PenNormal
restPort ;m
:m GETNEW:
0 int: resid 0 -1 call GetNewDialog put: dlgPtr
drawBold: self ;m
:m SETPROC: \ ( xt -- ) set dialog proc
put: procPtr ;m
:m MODAL:
BEGIN
get: procPtr addr: theItem call ModalDialog
get: theItem 1- exec: super
rtm false -> rtm
NUNTIL ;m
:m PUTITEM: \ ( val item# -- )
itemHandle: self swap makeint call SetCtlValue ;m
:m GETITEM: \ ( item# -- val ) Gets value for an item#
itemHandle: self >r word0 r>
call GetCtlValue word0 ;m
:m PUTRESID: \ ( resID -- )
put: resID ;m
:m INIT: \ ( xt1 ... xtN N resID -- )
put: resID put: super ;m
:m SETBOLD: \ ( item# -- ) Causes bold outline of the specified item
put: boldItem ;m
:m GETTEXT: \ ( item# -- addr len ) Returns a text item's text
itemHandle: self buf255 get: ItemType 24 and
IF call GetIText ELSE call GetCTitle THEN
buf255 count ;m
:m PUTTEXT: { addr len item# -- } \ Stores an item's text
item# itemHandle: self
addr len str255 get: ItemType 24 and
IF call SetIText ELSE call SetCTitle THEN ;m
:m SETSELECT: { start end item# -- }
\ Sets the selection range for text item
get: dlgPtr
item# makeInt start end pack call SeliText ;m
:m DRAW: \ Forces drawing of dialog before going to modal:
get: dlgPtr call DrawDialog ;m
\ ====== Extra methods for manipulating dialog items ======
:m HIDEITEM: \ ( item# -- )
get: dlgPtr swap makeInt call HideDItem ;m
:m SHOWITEM: \ ( item# -- )
get: dlgPtr swap makeInt call ShowDItem ;m
:m DISABLEITEM: \ ( item# -- )
itemHandle: self w 254 call HiliteControl ;m
:m ENABLEITEM: \ ( item# -- )
itemHandle: self word0 call HiliteControl ;m
:m SETUSERPROC: { ^proc item# -- }
get: dlgPtr item# makeint
addr: itemType addr: itemHandle tempRect
call GetDitem
get: dlgPtr item# makeint word0 ^proc tempRect
call SetDitem ;m
:m HITBOLD:
get: boldItem dup NIF drop EXIT THEN
1- exec: self ;m
:m KEY: \ ( -- b )
\ Called when a key down event occurs with this dialog's
\ window active. Returns false if we've handled the key
\ here, so no further action is required. Subclasses can
\ have customized KEY: methods; here we just provide a
\ hopefully sensible default action - namely, we treat a
\ Return or Enter as a click on the bold item, and ignore
\ all other keys.
msg: fEvent $ FF and ( char typed )
dup 3 = swap RET = or
IF \ Return or Enter typed - treat as click on bold item
hitBold: self false EXIT
THEN
true ;m
:m TITLE: \ ( addr len -- )
str255
get: dlgPtr swap call SetWTitle ;m
:m MAXX: \ ( -- x )
get: dlgPtr maxX: window ;m
:m MAXY:
get: dlgPtr maxY: window ;m
:m MOVE: \ ( x y -- )
get: dlgPtr move: window ;m
:m CENTER:
get: dlgPtr center: window ;m
\ =================
:m SHOW:
get: dlgPtr call ShowWindow ;m
:m HIDE:
get: dlgPtr call HideWindow ;m
:m SELECT:
get: dlgPtr call SelectWindow ;m
:m CLASSINIT: \ Initializes default handlers to close the dialog box.
['] closer fill: self ;m
;class
: TOGITEM \ Toggles the check box or radio button
get: theItem 1 over getitem: caller - swap putitem: caller
returnToModal ;
: PARAMTEXT ( addr0 len0 addr1 len1 addr2 len2 addr3 len3 ) { \ p1 p2 p3 -- }
\ Substitutes Dialog text.
str255 dup -> p3 count +
>str255 dup -> p2 count +
>str255 dup -> p1 count +
>str255 p1 p2 p3 call ParamText ;